﻿using System;

namespace DTcms.Common
{
    /// <summary>
    /// 验证扩展
    /// </summary>
    public static partial class Extensions
    {
        /// <summary>
        /// 检测空值,为null则抛出ArgumentNullException异常
        /// </summary>
        /// <param name="obj">对象</param>
        /// <param name="parameterName">参数名</param>
        public static void CheckNull(this object obj, string parameterName)
        {
            if (obj == null)
                throw new ArgumentNullException(parameterName);
        }

        #region 是否为空
        /// <summary>
        /// 是否为空
        /// </summary>
        /// <param name="value">值</param>
        public static bool IsEmpty(this string value)
        {
            return string.IsNullOrWhiteSpace(value);
        }

        /// <summary>
        /// 是否为空
        /// </summary>
        /// <param name="value">值</param>
        public static bool IsEmpty(this object value)
        {
            if (value != null && !string.IsNullOrEmpty(value.ToString()))
            {
                return false;
            }
            return true;
        }
        #endregion

        #region 将对象转换为Int32类型
        /// <summary>
        /// 将对象转换为Int32类型
        /// </summary>
        /// <param name="value">值</param>
        /// <returns>转换后的int类型结果</returns>
        public static int ToInt(this object value)
        {
            if (value != null)
            {
                int rv = 0;
                if (Int32.TryParse(value.ToString(), out rv))
                {
                    return rv;
                }
            }
            return 0;
        }

        /// <summary>
        /// 将对象转换为Int32类型
        /// </summary>
        /// <param name="value">值</param>
        /// <returns>转换后的int类型结果</returns>
        public static int ToInt(this string value)
        {
            if (value != null)
            {
                int rv = 0;
                if (Int32.TryParse(value, out rv))
                {
                    return rv;
                }
            }
            return 0;
        }
        #endregion

        #region 将对象转换为decimal型
        /// <summary>
        /// 将对象转换为decimal型
        /// </summary>
        /// <param name="value">值</param>
        /// <returns>转换后的decimal类型结果</returns>
        public static decimal ToDecimal(this object value)
        {
            if (value != null)
            {
                decimal rv = 0;
                if (Decimal.TryParse(value.ToString(), out rv))
                {
                    return rv;
                }
            }
            return 0;
        }
        /// <summary>
        /// 将对象转换为decimal型
        /// </summary>
        /// <param name="value">值</param>
        /// <returns>转换后的decimal类型结果</returns>
        public static decimal ToDecimal(this string value)
        {
            if (value != null)
            {
                decimal rv = 0M;
                if (Decimal.TryParse(value.ToString(), out rv))
                {
                    return rv;
                }
            }
            return 0;
        }
        #endregion

        #region 将对象转换为日期时间类型
        /// <summary>
        /// 将对象转换为decimal型
        /// </summary>
        /// <param name="value">值</param>
        /// <returns>转换后的DateTime类型结果</returns>
        public static DateTime ToDateTime(this object value)
        {
            if (value != null)
            {
                DateTime rv;
                if (DateTime.TryParse(value.ToString(), out rv))
                {
                    return rv;
                }
            }
            return DateTime.Now;
        }
        /// <summary>
        /// 将对象转换为日期时间类型
        /// </summary>
        /// <param name="value">值</param>
        /// <returns>转换后的DateTime类型结果</returns>
        public static DateTime ToDateTime(this string value)
        {
            if (value != null)
            {
                DateTime rv;
                if (DateTime.TryParse(value.ToString(), out rv))
                {
                    return rv;
                }
            }
            return DateTime.Now;
        }
        #endregion
    }
}